Next: Specification Examples, Previous: Specification List, Up: Edebug and Macros [Contents][Index]
If a specification fails to match at some point, this does not necessarily mean a syntax error will be signaled; instead, backtracking will take place until all alternatives have been exhausted. Eventually every element of the argument list must be matched by some element in the specification, and every required element in the specification must match some argument.
When a syntax error is detected, it might not be reported
until much later, after higher-level alternatives have been
exhausted, and with the point positioned further from the real
error. But if backtracking is disabled when an error occurs, it
can be reported immediately. Note that backtracking is also
reenabled automatically in several situations; when a new
alternative is established by &optional,
&rest, or &or, or at the start
of processing a sublist, group, or indirect specification. The
effect of enabling or disabling backtracking is limited to the
remainder of the level currently being processed and lower
levels.
Backtracking is disabled while matching any of the form
specifications (that is, form, body,
def-form, and def-body). These
specifications will match any form so any error must be in the
form itself rather than at a higher level.
Backtracking is also disabled after successfully matching a
quoted symbol or string specification, since this usually
indicates a recognized construct. But if you have a set of
alternative constructs that all begin with the same symbol, you
can usually work around this constraint by factoring the symbol
out of the alternatives, e.g., ["foo" &or [first case]
[second case] ...].
Most needs are satisfied by these two ways that backtracking
is automatically disabled, but occasionally it is useful to
explicitly disable backtracking by using the gate
specification. This is useful when you know that no higher
alternatives could apply. See the example of the let
specification.
Next: Specification Examples, Previous: Specification List, Up: Edebug and Macros [Contents][Index]